package com.meisupic.copyright.service.impl;

import static com.meisupic.copyright.common.Constants.CERTIFICATE_FILE_PATH;
import static com.meisupic.copyright.common.Constants.OSS_HOST;

import com.alibaba.fastjson.JSON;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.Element;
import com.itextpdf.text.Font;
import com.itextpdf.text.Image;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
import com.meisupic.copyright.common.Constants;
import com.meisupic.copyright.domain.bo.BuyerPrototype;
import com.meisupic.copyright.domain.bo.ContractPrototype;
import com.meisupic.copyright.domain.bo.ContractPrototype.HttpFile;
import com.meisupic.copyright.domain.bo.ContractPrototype.PersonInfo;
import com.meisupic.copyright.domain.bo.ContractPrototype.ProductPrototype;
import com.meisupic.copyright.domain.bo.ContractPrototype.RegisterPrototype;
import com.meisupic.copyright.domain.po.AbnDownloadPo;
import com.meisupic.copyright.domain.po.AbnGoodsPo;
import com.meisupic.copyright.domain.po.AbnRealnameAuthPo;
import com.meisupic.copyright.domain.po.AbnVipOrderPo;
import com.meisupic.copyright.domain.po.RealNameAuth;
import com.meisupic.copyright.domain.vo.DciContractRecordCallbackVo;
import com.meisupic.copyright.domain.vo.DciContractRecordCallbackVo.ResultDetail;
import com.meisupic.copyright.domain.vo.ReturnToDciMessageVo;
import com.meisupic.copyright.exception.BizException;
import com.meisupic.copyright.repo.AbnDownloadRepo;
import com.meisupic.copyright.repo.AbnGoodsRepo;
import com.meisupic.copyright.repo.AbnRealnameAuthRepo;
import com.meisupic.copyright.repo.AbnVipOrderRepo;
import com.meisupic.copyright.repo.RealNameAuthRepo;
import com.meisupic.copyright.service.IContractRecordsService;
import com.meisupic.copyright.service.ICopyRightWorksService;
import com.meisupic.copyright.service.IOssService;
import com.meisupic.copyright.service.ITimevaleSignService;
import com.meisupic.copyright.support.HttpClient;
import com.meisupic.copyright.support.HttpRequester;
import com.meisupic.copyright.support.PdfToImage;
import com.meisupic.copyright.support.Response;
import com.meisupic.copyright.util.ConvertNumberToUpper;
import com.meisupic.copyright.util.DateUtil;
import com.meisupic.copyright.util.StringUtil;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.assertj.core.util.Lists;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.util.Base64Utils;
import sun.misc.BASE64Decoder;

@Service
public class ContractRecordsServiceImpl implements IContractRecordsService {


  @Autowired
  private IOssService ossService;

  @Autowired
  private AbnDownloadRepo abnDownloadRepo;

  @Autowired
  private AbnRealnameAuthRepo abnRealnameAuthRepo;

  @Autowired
  private AbnGoodsRepo abnGoodsRepo;

  @Autowired
  private RealNameAuthRepo realNameAuthRepo;

  @Autowired
  private AbnVipOrderRepo abnVipOrderRepo;

  @Autowired
  ITimevaleSignService timevaleSignService;

  @Autowired
  private ICopyRightWorksService copyRightWorksService;

  private String DECLARATION_FILE_PATH = OSS_HOST + Constants.DECLARATION_FILE_PATH;

  @Value("${esign.accountId}")
  private String accountId;

  @Value("${contract.record.url}")
  private String contractRecordUrl;

  @Value("${contract.savebuyerforesign.url}")
  private String savebuyerforesignUrl;

  private Logger logger = LoggerFactory.getLogger(this.getClass());

  @Override
  public void generateContract(Integer downloadId) {

    AbnDownloadPo abnDownloadPo = abnDownloadRepo.findOne(downloadId);
    if (abnDownloadPo == null) {
      throw new BizException("未找到对应订单");
    }
    Integer contractToUserId = abnDownloadPo.getUserId();
    Integer goodsId = abnDownloadPo.getGoodsId();

    AbnGoodsPo abnGoodsPo = abnGoodsRepo.findOne(goodsId);
    if (abnGoodsPo == null) {
      throw new BizException("未找到对应商品");
    }

    Integer authorId = abnGoodsPo.getAuthorId();
    List<RealNameAuth> realNameAuths = realNameAuthRepo.findByCreatorId(Long.valueOf(authorId));
    if (CollectionUtils.isEmpty(realNameAuths)) {
      throw new BizException("未找到转让方实名认证信息");
    }
    RealNameAuth contractFromRealNameAuth = realNameAuths.get(0);

    AbnRealnameAuthPo contractToRealNameAuth = abnRealnameAuthRepo
        .findAbnRealnameAuthPoByUserId(contractToUserId);
    if (contractToRealNameAuth == null) {
      throw new BizException("未找到受让方的实名认证信息");
    }

    List<AbnVipOrderPo> abnVipOrderPos = abnVipOrderRepo
        .findAbnVipOrderPosByUserId(contractToUserId);
    if (CollectionUtils.isEmpty(abnVipOrderPos)) {
      throw new BizException("未找到vip订单信息");
    }

    String contractUrl = generatePdf(contractFromRealNameAuth, contractToRealNameAuth, abnGoodsPo,
        abnVipOrderPos.get(0));
    abnDownloadPo.setContractUrl(contractUrl);
    abnDownloadRepo.save(abnDownloadPo);

    BuyerPrototype buyerPrototype = buildBuyerProtoType(contractToRealNameAuth);
    logger.info("购买者信息：{}", JSON.toJSONString(buyerPrototype));
    Response response = HttpClient
        .post(savebuyerforesignUrl, JSON.toJSONString(buyerPrototype), "utf-8");
    logger.info("保存购买者信息返回结果：{}", JSON.toJSONString(response));

    String contractJsonData = makeJson(contractFromRealNameAuth, contractUrl,
        contractToRealNameAuth, abnGoodsPo);

    String proxySignResult = timevaleSignService.localTextSign(contractJsonData);
    String applyerSignResult = timevaleSignService
        .localTextSign(contractFromRealNameAuth.getAccountId(), contractJsonData);

    Map<String, String> params = new HashMap<>();
    params.put("json", contractJsonData);
    params.put("proxySign", proxySignResult);
    params.put("applyerSign", applyerSignResult);
    params.put("eCertId", accountId);

//    logger.info("jsonData:{}", contractJsonData);
    Response contractResponse = HttpRequester.sendPost(contractRecordUrl, params);

    logger.info("DCI返回结果" + contractResponse.getContent());
  }

  @Override
  public ReturnToDciMessageVo handleContractRecordDciResult(String callbackMessage) {
    if (StringUtil.isEmpty(callbackMessage)) {
      logger.info("DCI合同备案返回的数据为空");
      return ReturnToDciMessageVo.failure("DCI合同备案返回的数据为空");
    }

    DciContractRecordCallbackVo vo = JSON
        .parseObject(callbackMessage, DciContractRecordCallbackVo.class);
    if (vo.getFlag()) {
      List<ResultDetail> resultDetails = vo.getAuditDetailList();
      for (ResultDetail resultDetail : resultDetails) {
        String resId = resultDetail.getProductResId();
        if (StringUtil.isEmpty(resId)) {
          logger.error("未找到resId为{}的合同备案信息", resId);
          continue;
        }
        String fileName = resultDetail.getFileName();
        copyRightWorksService.saveAndUploadCertToOss(fileName, resultDetail.getContent());
        String certUrl =
            "http://meisudci.oss-cn-beijing.aliyuncs.com/certificate/" + fileName;
        AbnDownloadPo po = abnDownloadRepo.findAbnDownloadPoByResId(resId);
        po.setCertUrl(certUrl);
        po.setDciUrl(resultDetail.getUrl());
        po.setDciCCode(resultDetail.getDciCCode());
        po.setDciSCode(resultDetail.getDciSCode());
        abnDownloadRepo.save(po);
      }
    } else {

    }

    return null;
  }

  private String generatePdf(RealNameAuth contractFromRealNameAuth,
      AbnRealnameAuthPo contractToRealNameAuth, AbnGoodsPo abnGoodsPo,
      AbnVipOrderPo abnVipOrderPo) {

    // 设置纸张大小
    Document document = new Document(PageSize.A4);
    // 建立一个书写器，与document对象关联
    File file = new File(FileUtils.getUserDirectory(), StringUtil.get32UUID() + ".pdf");
    try {

      PdfWriter.getInstance(document, FileUtils.openOutputStream(file));
      document.open();
      // 设置中文字体
      BaseFont bfChinese = BaseFont
          .createFont("STSongStd-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
      // 标题字体风格
      Font titleFont = new Font(bfChinese, 22, Font.BOLD);

      Font subTitleFont = new Font(bfChinese, 12, Font.BOLD);

      // 正文字体风格
      Font contextFont = new Font(bfChinese, 12, Font.NORMAL);
      // 参数字体风格
      Font paramFont = new Font(bfChinese, 12, Font.UNDERLINE);

      Paragraph title = new Paragraph("著作权许可使用合同", titleFont);
      title.setAlignment(Element.ALIGN_CENTER);
      title.setLeading(15f);

      Paragraph para1 = new Paragraph();
      para1.setAlignment(Element.ALIGN_LEFT);
      para1.setFont(contextFont);
      para1.setLeading(20f);
      para1.setSpacingBefore(3);
      para1.add(new Chunk("授权方（甲方）：" + contractFromRealNameAuth.getAuthName() + "\n", contextFont));
      para1.add(
          new Chunk("身份证号码/营业执照号：" + contractFromRealNameAuth.getDocumetNo() + "\n", contextFont));
      para1.add(new Chunk("通信地址：\n", contextFont));
      para1.add(new Chunk("手机号：\n", contextFont));
      para1.add(new Chunk("\n", contextFont));
      String contractToName = contractToRealNameAuth.getPersonName();
      String contractToCardId = contractToRealNameAuth.getPersonCardId();
      String mobile = "";
      if (!"person".equals(contractToRealNameAuth.getType())) {
        contractToName = contractToRealNameAuth.getOrganName();
        contractToCardId = contractToRealNameAuth.getOrganCardNo();
      }

      para1.add(new Chunk("被授权方（乙方）：" + contractToName + "\n", contextFont));
      para1.add(new Chunk("身份证号码/营业执照号：" + contractToCardId + "\n", contextFont));
      para1.add(new Chunk("通信地址：\n", contextFont));
      para1.add(new Chunk("手机号：" + mobile + "\n", contextFont));

      para1.add(new Chunk("\n 鉴于：\n"
          + "1、甲方通过美素包年订阅平台（主体为北京美素创意科技有限公司）上传发布并出售" + abnGoodsPo.getTitle()
          + "作品的许可使用授权，乙方通过美素包年订阅平台购买甲方作品的非专有使用权许可。\n"
          + "2、甲乙双方在平台上完成作品许可使用授权交易后，由美素包年订阅平台作为代理申请人为甲乙双方"
          + "达成的作品交易进行合同备案；合同备案类型包含摄影、美术、图形及其他（同时包含了摄影、"
          + "美术等类型创作的）类型作品的非专有许可使用合同。\n"
          + "为依法维护著作权人和被授权人得合法权益，基于以上，甲乙双方经友好协商，一致达成协议如下"
          + "条款，共同遵照执行：\n"));
      para1.add(new Chunk("一、授权许可使用作品名称及信息", subTitleFont));
      para1.add(new Chunk("作品名称：" + abnGoodsPo.getTitle() + "\n"
          + "作品DCI码：" + abnGoodsPo.getDci() + "\n"
          + "作品ID：" + abnGoodsPo.getId() + "\n"
          + "样图：\n", contextFont));

      String imageUrl = abnGoodsPo.getImg() + "?x-oss-process=image/resize,h_300";
      Image image = Image.getInstance(new URL(imageUrl));
      image.setAlignment(Element.ALIGN_CENTER);
      para1.add(image);
      para1.add("\n");

      para1.add(new Chunk("二、授权许可使用的权利种类、内容、用途\n", subTitleFont));
      para1.add(new Chunk(
          "1、甲方授予乙方其作品" + abnGoodsPo.getTitle()
              + "的许可使用的权利为非专有使用权，在合同约定的使用条件下，甲方对乙方许可使用的权利种类包括：复制权、信息网络传播权、摄制权。\n"
              + "2、授权用途： 乙方获取许可使用授权后，可将作品用于数字广告、线下印刷或产品推广等商业用途。/乙方获取许可使用授权后，可将作品用于出版业、网络文章或出版物、参考书籍、非商业性演示、电视节目、电影纪录片、新闻等传媒用途。\n"
              + "\n"
              + "具体如下：\n",
          contextFont));
      para1.add(new Chunk("1）允许使用的用途：\n", subTitleFont));
      para1.add(new Chunk(
          "A.数字使用：网站；广告条幅；屏幕保护程序；壁纸；软件（用于个人电脑和移动设备）；电子贺卡；电子邮件；电子图书；演示（PowerPoint、Flash等）；电影、视频录像或电视广告；非官方的标志；个人用途等； \n"
              + "B.印刷使用：在报纸和杂志上的广告；印制的广告材料；书籍、报纸、杂志的封面和插图；名片；传单；海报；CD / DVD封面；包装纸、标签和产品包装； 文具：素材夹、笔记本、钢笔、铅笔、贴纸；小玩意；日历；马克杯和玻璃杯；鼠标垫；T恤衫、服装；个人非商业用途等；使用图片印刷、复制及发送次数总数不超过500,000次；\n",
          contextFont));
      para1.add(new Chunk("2）禁止使用的用途：\n", subTitleFont));
      para1.add(new Chunk(
          "A.与第三方分享，包括以共享、交换、转让或散发素材的目的在互联网、数字资产管理系统、共享硬盘或类似设备上分享从本网站上购买的素材或者将素材提供给任何第三方使用； \n"
              + "B.转让、转售、再次分销、共享、捐赠或者以其它方式转让素材或权利给第三方；\n"
              + "C.将原素材或者利用原素材创作的衍生作品，用在商品、促销商品或赠品（统称为“商品”）中用于销售或分销，包括但不限于纺织品、艺术品、冰箱贴、装饰画、日历、玩具、文具、贺卡、服装、马克杯、墙纸、塑料制品等，以及其他任何用于销售或分销用途的实物复制品；\n"
              + "D.作为数字模板的构成元素，包括但不限于软件、程序、电子贺卡等用于销售或分销的数字产品；\n"
              + "E.使用明确标记为\"仅限传媒用途\"的素材用于商业目的；\n"
              + "F.使用素材（其部分或者全部）来创建官方标志、服务标记、公司名称或商标；\n"
              + "G.使用图片的行为涉及违反中华人民共和国相关法律法规，或用于色情、非法或不道德的目的，或用于诽谤、丑化、诋毁或攻击任何个人或社会团体；\n"
              + "H.使用素材的方式侵犯到第三方的商标或其他知识产权，或涉嫌欺骗性广告或不正当竞争;\n"
              + "\n", contextFont));
      para1.add(new Chunk("三、授权许可使用的地域范围、期限\n", subTitleFont));
      para1.add(new Chunk("1、许可使用的地域范围：在授权期限内，乙方在全世界范围内作品受著作权保护的所有领域享有该作品的非专有许可使用授权。\n"
          + "2、授权期限：本协议所涉权利的授权期间为1年，自" + DateUtil.format(new Date(), "yyyy年MM月dd日") + "至" + DateUtil
          .format(DateUtil.addDays(DateUtil.addYears(new Date(), 1), -1), "yyyy年MM月dd日") + "。\n",
          contextFont));

      para1.add(new Chunk("四、授权费用及支付方式\n", subTitleFont));
      Integer totalFee = abnVipOrderPo.getTotalFee();
      String startDate = DateUtil.format(abnVipOrderPo.getPayTime(), "yyyy年MM月dd日");
      String endDate = DateUtil
          .format(DateUtil.addDays(DateUtil.addYears(abnVipOrderPo.getPayTime(), 1), -1),
              "yyyy年MM月dd日");
      para1.add(
          "1、乙方通过在线向甲方指定的美素包年订阅平台支付" + totalFee
              + "元（大写：" + ConvertNumberToUpper.digitUppercase(totalFee)
              + "整）购买美素包年订阅平台VIP会员的方式取得本合同约定期限内的甲方作品非专有使用权，包年会员期限为自" + startDate + "至" + endDate
              + "。\n"
              + "2、甲方就上述授权费用获得的具体分成及支付方式由美素包年订阅平台与甲方按照美素包年订阅平台与甲方之间的合伙人协议及相关协议的约定进行结算、支付。\n");
      para1.add(new Chunk("五、双方的其他权利和义务\n", subTitleFont));
      para1.add(new Chunk(
          "1、甲方保证对作品拥有完整清晰的著作权，且作品权利无瑕疵无争议，不会违背任何法律法规、国家政策。因甲方作品违反现行法律法规而引起的一切争议、投诉、索赔、诉讼等后果，均由甲方承担全部责任并赔偿因此而给乙方造成的损失；\n"
              + "2、乙方需要合理使用美素包年订阅平台的VIP账号，为了防止乙方（或其他人登录乙方账号）在授权期限内短时间内高频或大量下载，出于对网站自身的商业保护，美素包年订阅平台在技术上设置了防盗刷图系统，一旦发现乙方（或其他人登录乙方账号）有恶意下载行为或者恶意账号共享的行为，将暂停VIP账号的下载功能。\n"
              + "3、乙方使用甲方作品不得侵犯甲方权益，乙方保证严格按照本合同约定的条件及美素包年订阅平台有关规定使用甲方作品，如有特殊需求，需通过美素包年订阅平台另行取得相应书面授权。\n"
              + "4、如乙方在授权期限届满继续使用甲方作品，乙方应当再次通过美素包年订阅平台购买相应期限的授权。\n", contextFont));

      para1.add(new Chunk("六、违约责任\n", subTitleFont));
      para1.add(
          new Chunk("1、乙方在授权期限届满未经合法授权继续使用甲方作品的，乙方应向甲方支付10000元的违约金。如甲方实际损失超过前述违约金的，乙方应当按照实际损失赔偿。\n"
              + "2、如乙方在授权期限内未经甲方同意擅自将本合同项下作品或作品的许可使用授权授予、分享给第三方使用的，甲方有权立即通知乙方解除本合同，并要求乙方支付10000元的违约金。如甲方实际损失超过前述违约金的，乙方应当按照实际损失赔偿。\n"
              + "3、对于乙方使用甲方作品发生违反本合同使用要求的其他行为，甲方有权选择要求乙方在合理期限内予以纠正，并采取相应补救措施、赔偿甲方全部损失；或选择立即通知乙方解除本合同，并要求乙方赔偿甲方全部损失。\n",
              contextFont));
      para1.add(new Chunk("七、争议解决\n", subTitleFont));
      para1.add(
          new Chunk("本合同适用中华人民共和国法律。甲乙双方同意，一旦发生纠纷应友好协商解决，协商不成时，提起诉讼一方，应将案件提交本合同签订地有管辖权人民法院管辖。\n",
              contextFont));

      para1.add(new Chunk("八、其他\n", subTitleFont));
      para1.add(new Chunk("1、本合同签订后如需修改或补充，应当经双方协商一致后签订书面补充协议。\n"
          + "2、本合同自双方签字、盖章之日起生效。本协议一式两份，双方各执一份，具有同等法律效力。\n"
          + "3、本合同于" + DateUtil.format(new Date(), "yyyy") + "年" + DateUtil.format(new Date(), "MM")
          + "月" + DateUtil.format(new Date(), "dd") + "日在北京市海淀区签订。\n\n\n", contextFont));

      para1.add(new Chunk(
          "甲方（签字）：" + contractFromRealNameAuth.getAuthName() + "                            乙方（签字）："
              + contractToName + "\n",
          subTitleFont));
      para1.add(new Chunk(
          "日期：" + DateUtil.formatDate(new Date()) + "                    日期：" + DateUtil
              .formatDate(new Date()), subTitleFont));

      document.add(title);
      document.add(para1);
      document.close();

      ossService.putObject(Constants.DECLARATION_FILE_PATH + file.getName(), file);
      try {
        FileUtils.forceDelete(file);
      } catch (IOException e) {
        logger.error("刪除声明文件失败", e);
      }

      return DECLARATION_FILE_PATH + file.getName();
    } catch (Exception e) {
      logger.error("生成pdf失败", e);
      throw new BizException("生成合同失败");
    }
  }

  private String makeJson(RealNameAuth contractFromRealNameAuth, String contractUrl,
      AbnRealnameAuthPo contractToRealNameAuth, AbnGoodsPo abnGoodsPo) {
    RegisterPrototype applyer = new RegisterPrototype();
    applyer.setCaid(contractFromRealNameAuth.getAccountId());

    RegisterPrototype proxy = new RegisterPrototype();
    proxy.setCaid(accountId);

    HttpFile httpFile = new HttpFile();
    List<String> content = Lists.newArrayList();
    try {
      String zhtxxBase64Content = Base64Utils
          .encodeToString(IOUtils.toByteArray(new URL(contractUrl)));
      content.add(zhtxxBase64Content);
      String sfzzm1 = Base64Utils.encodeToString(
          IOUtils.toByteArray(new URL(contractFromRealNameAuth.getDocumentImgPositive())));
      String sfzfm1;
      if ("person".equals(contractFromRealNameAuth.getAuthType())) {
        sfzfm1 = Base64Utils.encodeToString(
            IOUtils.toByteArray(new URL(contractFromRealNameAuth.getDocumentImgBack())));
      } else {
        sfzfm1 = sfzzm1;
      }

      content.add(sfzzm1);
      content.add(sfzfm1);
      String sfzzm2;
      String sfzfm2;
      if ("person".equals(contractToRealNameAuth.getType())) {
        sfzzm2 = Base64Utils.encodeToString(
            IOUtils.toByteArray(new URL(contractToRealNameAuth.getPersonFrontImg())));
        sfzfm2 = Base64Utils.encodeToString(
            IOUtils.toByteArray(new URL(contractToRealNameAuth.getPersonBackImg())));
      } else {
        sfzzm2 = Base64Utils
            .encodeToString(IOUtils.toByteArray(new URL(contractToRealNameAuth.getOrganImg())));
        sfzfm2 = sfzzm2;
      }
      content.add(sfzzm2);
      content.add(sfzfm2);

    } catch (IOException e) {
      logger.error("获取附件信息失败", e);
      throw new BizException("获取附件信息失败");
    }
    List<String> filename = Lists.newArrayList();
    filename.add("ZHTXX-01.pdf");
    filename.add("SFZZM1.jpg");
    filename.add("SFZFM1.jpg");
    filename.add("SFZZM2.jpg");
    filename.add("SFZFM2.jpg");
    httpFile.setFilename(filename);
    httpFile.setContent(content);

    PersonInfo contractFrom = new PersonInfo();
    contractFrom.setCaid(contractFromRealNameAuth.getAccountId());
    contractFrom.setCountry("中国");
    contractFrom.setPeopletype("person".equals(contractFromRealNameAuth.getAuthType()) ? "1" : "2");

    PersonInfo contractTo = new PersonInfo();
    contractTo.setCaid(contractToRealNameAuth.geteSignAcountId());
    contractTo.setCountry("中国");
    contractTo.setPeopletype("person".equals(contractToRealNameAuth.getType()) ? "1" : "2");

    ProductPrototype productPrototype = new ProductPrototype();
    productPrototype.setRegisterednum(abnGoodsPo.getDci());

    ContractPrototype contractPrototype = new ContractPrototype();
    contractPrototype.setContracttype(1);
    contractPrototype.setRightscope("1$2$3$4$5$6$7$8$9$10$11$12$13$14$15$16$17$全部权利");
    contractPrototype.setAppearcountry(1);
    contractPrototype.setValiddatestart(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss"));
    contractPrototype.setValiddateend(DateUtil
        .format(DateUtil.addDays(DateUtil.addYears(new Date(), 1), -1), "yyyy-MM-dd HH:mm:ss"));
    contractPrototype.setApplytype(1);
    contractPrototype.setRemark("");
    contractPrototype.setProxycontent("");
    contractPrototype.setApplyer(applyer);
    contractPrototype.setProxy(proxy);
    contractPrototype.setAttachment(httpFile);
    contractPrototype.setContractfrom(contractFrom);
    contractPrototype.setContractto(contractTo);
    contractPrototype.setProduct(productPrototype);
    contractPrototype.setRes_id(StringUtil.get32UUID());
    contractPrototype.setRegistertype("artContractRegist");

    return JSON.toJSONString(contractPrototype);

  }


  private BuyerPrototype buildBuyerProtoType(AbnRealnameAuthPo abnRealnameAuthPo) {
    BuyerPrototype buyerPrototype = new BuyerPrototype();
    buyerPrototype.setAccountUid(abnRealnameAuthPo.geteSignAcountId());
    if ("person".equals(abnRealnameAuthPo.getType())) {
      buyerPrototype.setIdcardno(abnRealnameAuthPo.getPersonCardId());
      buyerPrototype.setIdcardtype("1");
      buyerPrototype.setName(abnRealnameAuthPo.getPersonName());
    } else {
      buyerPrototype.setIdcardtype(abnRealnameAuthPo.getOrganCardNo());
      buyerPrototype.setIdcardtype("5");
      buyerPrototype.setName(abnRealnameAuthPo.getOrganName());
    }
    buyerPrototype.setPlatform(accountId);
    return buyerPrototype;
  }


}
